class Solution {
public:
    string GetDigits(string& s,int& ptr)
    {
        string str;
        while(isdigit(s[ptr]))
        {
            str+=s[ptr++];
        }
        return str;
    }
    string getString(vector <string> &v) {
        string ret;
        for (const auto &s: v) {
            ret += s;
        }
        return ret;
    }

    string decodeString(string s) {
        vector<string> st;
        int ptr=0;
        while(ptr<s.size())
        {
            if(isdigit(s[ptr]))
            {
                string digit=GetDigits(s,ptr);
                st.push_back(digit);
            }
            else if(isalpha(s[ptr])||s[ptr]=='[')
            {
              st.push_back(string(1, s[ptr++])); 
            }
            else
            {
                ptr++;
                vector<string> sub;
                while(st.back()!="[")
                {
                    sub.push_back(st.back());
                    st.pop_back();
                }
                reverse(sub.begin(),sub.end());
                //左括号出栈
                st.pop_back();
                string str=getString(sub);
                //获取num并且出栈
                int num=stoi(st.back());
                st.pop_back();
                //构造字符串
                string ret;
                for(int i=0;i<num;i++)
                ret+=str;
                st.push_back(ret);
            }
        }
        return getString(st);
    }
};